package com.gzu.finalwork.admin.mapper;

import com.gzu.finalwork.entity.user.DeliveryOrders;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface AdminOrderMapper {
    
    /**
     * 根据条件查询订单列表（支持筛选、搜索、分页）
     * @param offset 偏移量
     * @param pageSize 每页大小
     * @param orderStatus 订单状态筛选
     * @param keyword 搜索关键词
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 订单列表
     */
    List<DeliveryOrders> selectOrdersWithFilter(@Param("offset") int offset,
                                               @Param("pageSize") int pageSize,
                                               @Param("orderStatus") Integer orderStatus,
                                               @Param("keyword") String keyword,
                                               @Param("startDate") String startDate,
                                               @Param("endDate") String endDate);

    /**
     * 根据条件统计订单数量
     * @param orderStatus 订单状态筛选
     * @param keyword 搜索关键词
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 订单数量
     */
    int countOrdersWithFilter(@Param("orderStatus") Integer orderStatus,
                             @Param("keyword") String keyword,
                             @Param("startDate") String startDate,
                             @Param("endDate") String endDate);

    /**
     * 根据订单ID查询订单详情
     * @param orderId 订单ID
     * @return 订单信息
     */
    DeliveryOrders selectOrderById(@Param("orderId") Long orderId);

    /**
     * 更新订单状态
     * @param orderId 订单ID
     * @param orderStatus 新的订单状态
     * @param remark 备注
     * @return 更新行数
     */
    int updateOrderStatus(@Param("orderId") Long orderId,
                         @Param("orderStatus") Integer orderStatus,
                         @Param("remark") String remark);

    /**
     * 统计总订单数
     * @return 总订单数
     */
    int countTotalOrders();

    /**
     * 根据状态统计订单数
     * @param orderStatus 订单状态
     * @return 订单数量
     */
    int countOrdersByStatus(@Param("orderStatus") Integer orderStatus);

    /**
     * 统计今日订单数
     * @return 今日订单数
     */
    int countTodayOrders();

    /**
     * 统计本月订单数
     * @return 本月订单数
     */
    int countMonthOrders();

    /**
     * 删除订单（软删除）
     * @param orderId 订单ID
     * @return 删除行数
     */
    int deleteOrder(@Param("orderId") Long orderId);
} 